/**
 * 此脚本用于直接更新MongoDB中工厂方法模式的示例代码
 */
const { MongoClient } = require('mongodb');
require('dotenv').config();

// MongoDB连接配置
const MONGODB_URI = process.env.MONGODB_URI || 'mongodb://gof23user:gof23password@localhost:27017/gof23-game';

// 工厂方法模式Java示例代码
const factoryMethodCode = `/**
 * 工厂方法模式示例
 */
// 产品接口
interface Product {
    void operation();
}

// 具体产品A
class ConcreteProductA implements Product {
    @Override
    public void operation() {
        System.out.println("ConcreteProductA operation");
    }
}

// 具体产品B
class ConcreteProductB implements Product {
    @Override
    public void operation() {
        System.out.println("ConcreteProductB operation");
    }
}

// 创建者抽象类
abstract class Creator {
    // 工厂方法
    public abstract Product createProduct();
    
    // 使用产品的方法
    public void someOperation() {
        // 调用工厂方法创建产品
        Product product = createProduct();
        // 使用产品
        product.operation();
    }
}

// 具体创建者A
class ConcreteCreatorA extends Creator {
    @Override
    public Product createProduct() {
        return new ConcreteProductA();
    }
}

// 具体创建者B
class ConcreteCreatorB extends Creator {
    @Override
    public Product createProduct() {
        return new ConcreteProductB();
    }
}

// 客户端代码
public class Client {
    public static void main(String[] args) {
        // 使用ConcreteCreatorA
        Creator creatorA = new ConcreteCreatorA();
        creatorA.someOperation(); // 输出: ConcreteProductA operation
        
        // 使用ConcreteCreatorB
        Creator creatorB = new ConcreteCreatorB();
        creatorB.someOperation(); // 输出: ConcreteProductB operation
    }
}`;

async function updateFactoryMethodCode() {
  let client;

  try {
    // 连接数据库
    client = new MongoClient(MONGODB_URI);
    await client.connect();
    console.log('MongoDB 连接成功');
    
    const db = client.db(); // 使用默认数据库
    const patternsCollection = db.collection('patterns');
    
    // 查找工厂方法模式
    const pattern = await patternsCollection.findOne({ name: 'Factory Method' });
    
    if (!pattern) {
      console.log('未找到工厂方法模式');
      process.exit(1);
    }
    
    // 更新示例代码
    await patternsCollection.updateOne(
      { name: 'Factory Method' },
      { $set: { sampleCode: factoryMethodCode } }
    );
    
    console.log('成功更新工厂方法模式示例代码');
  } catch (err) {
    console.error('更新工厂方法模式示例代码失败:', err);
    process.exit(1);
  } finally {
    // 关闭连接
    if (client) {
      await client.close();
    }
    process.exit(0);
  }
}

// 执行更新
updateFactoryMethodCode(); 